package org.footballmanager.pandafootball.system.service;

import org.footballmanager.pandafootball.system.domain.FootUser;
import org.footballmanager.pandafootball.system.domain.enums.QX;
import org.footballmanager.pandafootball.system.form.impl.FootUserSearchForm;
import org.springframework.ui.Model;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

public interface FootUserService extends BaseService<FootUser> {
    /**
     * 获取管理员的用户Id
     *
     * @return 管理员的id
     */
    Long getAdminUserid();

    /**
     * 获取除管理员的所有用户
     *
     * @param request 请求
     * @return 用户列表
     */
    List<FootUser> getAllWithoutAdmin(HttpServletRequest request);

    /**
     * 三月不登录的删除账号
     */
    void processUserNoLogin();

    /**
     * 是否让用户登录系统
     *
     * @param issd    是否锁定
     * @param request 请求
     */
    void cancelLogin(boolean issd, HttpServletRequest request);

    /**
     * 获取会员
     *
     * @return 用户列表
     */
    List<FootUser> findGameIdIsNotNull();

    /**
     * 根据用户名查找用户
     *
     * @param name 姓名
     * @return 用户列表
     */
    FootUser findUserByName(String name);

    /**
     * 根据用户昵称查找用户
     *
     * @param nike 昵称
     * @return 用户列表
     */
    List<FootUser> findUsersByNike(String nike);

    /**
     * 根据用户名和邮件查找用户
     *
     * @param name  姓名
     * @param email 邮箱
     * @return 用户
     */
    FootUser findUserByNameEmail(String name, String email);

    /**
     * 根据用户主键，更改用户权限
     *
     * @param id      用户主键
     * @param qx      权限
     * @param request 请求
     */
    void changeUser2Vip(Long id, QX qx, HttpServletRequest request);

    /**
     * 根据用户获取vip的等级加成
     *
     * @param user    用户
     * @param request 请求
     * @return 等级
     */
    double getVipLevel(FootUser user, HttpServletRequest request);

    /**
     * 修改新用户的信息到数据库
     *
     * @param user    用户
     * @param request 请求
     * @return 主键
     */
    int saveNewUser(FootUser user, HttpServletRequest request);

    /**
     * 查询
     *
     * @param entityname         实体类名
     * @param map                参数
     * @param footUserSearchForm 条件
     */
    void search(String entityname, Model map, FootUserSearchForm footUserSearchForm);

    /**
     * 删除所有
     *
     * @param footUserSearchForm 条件
     * @param request            请求
     */
    void deleteAll(FootUserSearchForm footUserSearchForm, HttpServletRequest request);

    /**
     * 邮箱激活用户
     *
     * @param user    用户实体类
     * @param request 请求
     */
    void setEnabledTrue(FootUser user, HttpServletRequest request);

    /**
     * 更改密码
     *
     * @param user        用户实体类
     * @param request     请求
     * @param map         参数
     * @param isSendEmail 是否发送邮件
     * @return 新密码
     */
    String changePassword(FootUser user, HttpServletRequest request, Model map, boolean isSendEmail);

    /**
     * 根据邮件查询是否存在
     *
     * @param email 邮箱
     * @return 是否存在
     */
    boolean checkEmail(String email);
}